//错误处理中间件

const { createPublicKey } = require('crypto');
let path=require('path');
let fs=require('fs');
module.exports=options=>{
    return async function error_handle(ctx,next){
        try{
            await next();//向下执行
            // 404
            if(ctx.status==404&& !ctx.body){
                if(ctx.acceptJSON){//接收的是一个JSON
                    ctx.body={
                        error:"NOT FOUND"
                    }
                }else{
                    //把404页面返回出去
                    const  filepath=path.join(process.cwd(),'app/public/pages','404.html');
                    const fileData=fs.readFileSync(filepath,'utf-8');
                    console.log(fileData)
                    ctx.body=fileData;
                        
                }
            }
        }catch (error){
            //500
            ctx.app.emit('error',error,ctx);
            //定义status
            const status=error.status||500;
            //在生产环境 500的错误详情信息不发给客户端，因为错误信息可能包含敏感信息
            const err=status===500&&ctx.app.config.env==='prod'? 'Internal Server error':error.message;
            //从err对象上读出属性设置到响应中
            ctx.body={err};
            if(status===422){
                ctx.body.detail=error.errors;

            }
            ctx.status=status;
        }
    }
}